package com.iwhalecloud.bss.kite.cucc.service.attr.handler;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;

import com.google.common.collect.Lists;
import com.iwhalecloud.bss.kite.common.util.KiteListUtils;
import com.iwhalecloud.bss.kite.common.util.KiteObjectUtils;
import com.iwhalecloud.bss.kite.cucc.common.constant.LocalKeyConsts;
import com.iwhalecloud.bss.kite.manager.api.IQuerySceneInstService;
import com.iwhalecloud.bss.kite.manager.enums.ActionType;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttr;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttrValue;
import com.iwhalecloud.bss.kite.manager.inst.KiteProdInst;
import com.iwhalecloud.bss.kite.manager.inst.KiteProdInstFunc;
import com.iwhalecloud.bss.kite.service.attr.AttrData;
import com.iwhalecloud.bss.kite.service.attr.handler.AbstractAttrHandler;

/**
 * 使用切片
 * Created by huanghaosheng on 2020/12/7 19:52
 */
public class LocalStandbyCustomerAttrHandler extends AbstractAttrHandler<KiteProdInstFunc, AttrData> {

    @Autowired
    private IQuerySceneInstService querySceneInstService;

    public void onShow(KiteAttr attr, KiteProdInstFunc inst, AttrData data) {
        // 取所有接入类产品
        List<KiteProdInst> kiteProdInstList = querySceneInstService.listProdInsts(data.getSceneInstId());
        final KiteProdInst[] prodInsts = new KiteProdInst[1];
        if (KiteListUtils.isNotEmpty(kiteProdInstList)) {
            kiteProdInstList.stream().forEach(prodInst -> {
                List<KiteProdInstFunc> kiteProdInstFuncs = querySceneInstService
                    .listProdInstFuncs(data.getCustId(), prodInst.getProdInstId());
                if (KiteListUtils.isNotEmpty(kiteProdInstFuncs)) {
                    kiteProdInstFuncs.stream().forEach(kiteProdInstFunc -> {
                        if (kiteProdInstFunc.getProdId().equals(LocalKeyConsts.FUNC_PROD_ID_5GQP)) {
                            prodInsts[0] = prodInst;
                            return;
                        }
                    });
                }
            });
        }
        List<KiteAttrValue> attrValueList = new ArrayList<>();
        KiteAttrValue attrValues = new KiteAttrValue();
        attrValues.setAttrValue("100007414");
        attrValues.setAttrValueName("默认切片");
        attrValueList.add(attrValues);
        if (prodInsts[0] == null) {
            attr.setDefaultValue("100007414");
            attr.setAttrValues(attrValueList);
            return;
        }
        List<KiteProdInstFunc> kiteProdInstFuncs = Lists.newArrayList();
        if (!KiteObjectUtils.isEmpty(prodInsts) && !KiteObjectUtils.isEmpty(prodInsts[0])) {
            kiteProdInstFuncs = querySceneInstService
                .listProdInstFuncsByProdId(data.getCustId(), prodInsts[0].getProdInstId(),
                    LocalKeyConsts.FUNC_PROD_ID_5GQP);
        }
        if (!KiteListUtils.isEmpty(kiteProdInstFuncs)) {
            kiteProdInstFuncs = kiteProdInstFuncs.stream().filter(t -> !ActionType.D.equals(t.getActionType()))
                .collect(Collectors.toList());
            kiteProdInstFuncs.forEach(funcProdInst -> {
                KiteAttr wayAttr = funcProdInst.getAttr("200004157"); // 切片编号
                if (Objects.nonNull(wayAttr)) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(wayAttr.getValue());
                    attrValue.setAttrValueName(wayAttr.getValue());
                    attrValueList.add(attrValue);
                }
            });
            attr.setDefaultValue("100007414");
            attr.setAttrValues(attrValueList);
        }
        else {
            attr.setDefaultValue("100007414");
            attr.setValue("100007414");
            attr.setValueDesc("默认切片");
            attr.setAttrValues(attrValueList);
        }

    }

}
